home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Atari Compendium
/
The Atari Compendium (Toad Computers) (1994).iso
/
files
/
umich
/
telecomm
/
zmdm.zoo
/
common.c
next >
Wrap
C/C++ Source or Header
|
1991-04-27
|
37KB
|
1,529 lines
/*
* ACKNOWLEDGEMENTS
*
* ZMDM was derived from rz/sz for Unix posted by
* Chuck Forsberg (...!tektronix!reed!omen!caf ). We
* thank him for his excellent code, and for giving
* us permission to use and distribute his code and
* documentation.
*
* Atari St version by:
* Jwahar Bammi
* bang: {any internet host}!dsrgsun.ces.CWRU.edu!bammi
* domain: bammi@dsrgsun.ces.CWRU.edu
* GEnie: J.Bammi
*/
#include "config.h"
#define IN_COMMON
/*
* -rev 08-17-86
* mode function and most of the rest of the system dependent
* stuff for rb.c and sb.c This file is #included so the includer
* can set parameters such as HOWMANY. See the main file (rz.c/sz.c)
* for compile instructions.
*/
#ifdef DLIBS
#include <string.h>
#endif
#include "zmdm.h"
#include "zmodem.h"
#ifndef Supexec
/* Some versions of osbind don't define Supexec */
#define Supexec(X) xbios(38,X)
#endif
#define CRCTABLE
/* GLOBALS */
int Zmodem; /* ZMODEM protocol requested */
int Nozmodem; /* If invoked as "rb" */
int Batch;
int Verbose;
int Quiet; /* overrides logic that would otherwise set verbose */
int Lleft; /* number of characters in linbuf */
int Readnum; /* Number of bytes to ask for in read() from modem */
int Crcflg, Nflag;
int ForceBinary; /* local binary force override for rz */
int Wcsmask;
FILE *logf;
FILE *STDERR;
int vdebug; /* set if RDEBUG or SDEBUG */
char secbuf[TXBSIZE];
char linbuf[KSIZE];
#if (MWC || MANX || __GNUC__) /* File i/o buffer */
unsigned char *bufr; /* In MWC, MANX or GNU it is lmalloc()'ed in main.c */
#else
#ifndef DYNABUF
unsigned char bufr[BBUFSIZ];
#else
unsigned char *bufr;
#endif /* DYNABUF */
#endif
int fout;
int Lastrx;
int Firstsec;
int Eofseen; /* indicates cpm eof (^Z) has been received */
int BEofseen; /* EOF seen on input set by fooseek */
int errors;
long Bytesleft; /* number of bytes of incoming file left */
long Modtime; /* Unix style mod time for incoming file */
unsigned int Filemode; /* Unix style mode for incoming file */
char Pathname[PATHLEN];
char *Progname; /* the name by which we were called */
int Thisbinary; /* current file is to be received in bin mode */
int Blklen; /* record length of received packets */
char Lzmanag; /* Local file management request */
char zconv; /* ZMODEM file conversion request */
char zmanag; /* ZMODEM file management request */
char ztrans; /* ZMODEM file transport request */
jmp_buf tohere; /* For the interrupt on RX timeout */
jmp_buf abrtjmp; /* for force abort */
jmp_buf busjmp; /* for bus errors */
jmp_buf addrjmp; /* for address errors */
unsigned long BusErr, AddrErr; /* saved vector addresses */
int Zctlesc; /* Encode control characters */
int SendType; /* Which send line to use */
int Modem; /* Send using Xmodem */
int lsct;
int tryzhdrtype; /* Header type to send corresponding to Last rx close */
int Txfcs32; /* TRUE means send binary frames with 32 bit FCS */
long Thisflen;
int Crc32t; /* Controls 32 bit CRC being sent */
/* 1 == CRC32, 2 == CRC32 + RLE */
int Crc32r; /* Indicates/controls 32 bit CRC being received */
/* 0 == CRC16, 1 == CRC32, 2 == CRC32 + RLE */
int Usevhdrs; /* Use variable length headers */
int Rxhlen; /* Length of header received */
/* Globals used by ZMODEM functions */
int Rxframeind; /* ZBIN or ZHEX indicates type of frame received */
int Rxtype; /* Type of header received */
int Rxcount; /* Count of data bytes received */
int Rxtimeout; /* Tenths of seconds to wait for something */
int Znulls; /* Number of nulls to send at beginning of ZDATA hdr */
char Rxhdr[ZMAXHLEN]; /* Received header */
char Txhdr[ZMAXHLEN]; /* Transmitted header */
long Rxpos; /* Received file position */
long Txpos; /* Transmitted file position */
char Attn[ZATTNLEN+1]; /* Attention string rx sends to tx on err */
char *Altcan; /* Alternate canit string */
int Zrwindow; /* RX window size (controls garbage count) */
/* Globals used by Sz */
unsigned Txwindow; /* Control the size of the transmitted window */
unsigned Txwspac; /* Spacing between zcrcq requests */
unsigned Txwcnt; /* Counter used to space ack requests */
long Lrxpos; /* Receiver's last reported offset */
int Lskipnocor;
int Rxclob; /* Clobber existing file */
char Lzconv; /* Local ZMODEM file conversion request */
char Lztrans;
char *Cmdstr; /* Pointer to the command string */
int Optiong; /* Let it rip no wait for sector ACK's */
int Totsecs; /* total number of sectors this file */
int Command; /* Send a command, then exit. */
int Cmdack1; /* Rx ACKs command, then do it */
int Exitcode;
int Testattn; /* Force receiver to send Attn, etc with qbf. */
int Wantfcs32; /* want to send 32 bit FCS */
jmp_buf intrjmp; /* For the interrupt on RX CAN */
char *qbf;
unsigned int Rxbuflen; /* Receiver's max buffer length */
int Cmdtries;
int Filcnt; /* count of number of files opened */
int Lfseen;
int Tframlen; /* Override for tx frame length */
int blkopt; /* Override value for zmodem blklen */
int Rxflags;
int Ascii; /* Add CR's for brain damaged programs */
int Fullname; /* transmit full pathname */
int Unlinkafter; /* Unlink file after it is sent */
int Dottoslash; /* Change foo.bar.baz to foo/bar/baz */
int errcnt; /* number of files unreadable */
int siggi; /* line interrupt enable flag */
/* crctab calculated by Mark G. Mendel, Network Systems Corporation */
unsigned int crctab[256] = {
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
};
/*
* Copyright (C) 1986 Gary S. Brown. You may use this program, or
* code or tables extracted from it, as desired without restriction.
*
* Need an unsigned type capable of holding 32 bits;
*/
typedef unsigned long int UNS_32_BITS;
/* First, the polynomial itself and its table of feedback terms. The */
/* polynomial is